package com.train.user.service;

import com.train.user.domain.UserPlan;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

import java.util.Map;
import java.util.List;

/**
* @author HP
* @description 针对表【user_plan(用户计划表)】的数据库操作Service
* @createDate 2025-11-04 17:48:26
*/
public interface UserPlanService extends IService<UserPlan> {

    /**
     * 创建计划
     * @param userId 用户ID
     * @param planName 计划名称
     * @param planType 计划类型
     * @return 创建的计划
     */
    UserPlan createPlan(Long userId, String planName, String planType);

    /**
     * 修改计划
     * @param userId 用户ID
     * @param planId 计划ID
     * @param planName 计划名称（可选）
     * @param status 状态（可选）
     * @return 更新后的计划
     */
    UserPlan updatePlan(Long userId, Long planId, String planName, String status);

    /**
     * 删除计划
     * @param userId 用户ID
     * @param planId 计划ID
     */
    void deletePlan(Long userId, Long planId);

    /**
     * 获取用户计划列表
     * @param userId 用户ID
     * @param pageNum 页码
     * @param pageSize 每页数量
     * @param planType 计划类型（可选）
     * @param status 状态（可选）
     * @return 计划列表
     */
    List<UserPlan> getUserPlans(Long userId, Integer pageNum, Integer pageSize, String planType, String status);

    /**
     * 获取计划详情
     * @param userId 用户ID
     * @param planId 计划ID
     * @return 包含项目列表的计划详情
     */
    Map<String, Object> getPlanDetail(Long userId, Long planId);

    /**
     * 验证计划是否属于用户
     * @param userId 用户ID
     * @param planId 计划ID
     * @return 计划对象，不存在则返回null
     */
    UserPlan validatePlanOwnership(Long userId, Long planId);

    /**
     * 更新计划总时长和完成时长
     * @param planId 计划ID
     */
    void updatePlanDuration(Long planId);
}
